03 Event handling mechanisms
앞서나온 전제로, CPU가 하나일때에 대해 계속 생각해보자.
CPU에서 작동해야 하는 여러 프로그램들은 어떻게 서로에게 CPU 리소스 자리를 내어주고 차지할까?
물론, 하드웨어 리소스는 커널이 관리한다. 하지만 우리는 한발짝 더 나아가 그것에 대한 구체적인 메커니즘에 대해 고민해볼 것이다.
그 전에 운영체제는 프로그램을 프로세스process로 추상화한다는 사실을 알아두자. 프로그램은 사실 정적인 코드에 불과한데, 이를 동적이고 실행 가능한 논리적 단위인 프로세스로서 다룬다는 뜻이다.
프로그램: 정적인 코드
프로세스: 실행 중인 프로그램의 실행 상태를 포함한 추상 논리 객체
Context Switching
Context Switching: CPU가 A라는 프로세스를 중단하고 B 프로세스를 실행할 때, 레지스터, 스택 포인터, 프로그램 카운터 등 전체적인 프로세스의 실행 상태를 저장/복원하는 작업.
현재 실행중이던 프로세스가 CPU 리소스를 내어주고 다른 프로세스가 작업할 수 있게 해준다면, 컨텍스트 스위칭이 발생했다고 말할 수 있다.
(이러한 컨텍스트 스위칭이 빈번하게 발생한다면, 그 자체로 오버헤드가 커지는 문제를 일으킨다. 저장, 복원하는 과정 자체가 비용 즉, 오버헤드기 때문이다.)
CPU event processing techniques
컨텍스트 스위칭이 발생하기 위해서는 어떤 이벤트event가 발생해야 한다.
즉, 이 이벤트가 트리거가 되어 컨텍스트 스위칭을 발생시킨다고 이해할 수 있다.
이벤트는 다음 두가지로 나뉜다.
- Trap (synchronous event): 현재 실행 중인 프로세스의 명령 실행 결과로 발생하는 이벤트
- Interrupt (asynchronous event): 현재 실행 중인 프로세스와 무관하게 다른 장치 또는 외부에 의해 발생하는 이벤트
Trap processing
내가 코드를 잘못 짜서 divide by zero 이벤트가 발생하여 프로세스가 중지되었다 치자, 이것은 트랩이 발생했다고 할 수 있다.
Interrupt handling
유튜브 애플리케이션을 이용하던 중, 카카오톡 알림이 오는 상황을 생각해보자.
유튜브와 카카오톡은 서로 다른 프로그램이다. 따라서 카카오톡 알림을 받기 위해서는 실행 중이던 유튜브 프로세스의 상태를 저장한 후, 카카오톡 프로세스를 실행하는 context switching이 발생한다. 이런 경우 인터럽트가 발생했다고 말한다.
이전 글: 02 OS structure
다음 글: 04 CPU Scheduling